#pragma once
#include "../MenoryManager/MemoryManager.h"
#include "../Utility/Singleton.h"
#include "../Utility/Predeclare.h"
#include "../EngineSetting/EngineSetting.h"
#include "../RenderEngine/NBRenderEngine/NBRenderEngine.h"

#include "ModuleFactory.h"

//#ifdef ENGINE_FRAMEWORK_IMPLEMENT
//#define NB_ENGINE_API NB_API_EXPORT
//#else
//#define NB_ENGINE_API NB_API_IMPORT
//#endif // ENGINE_FRAMEWORK_IMPLEMENT


class NBEngine : public EngineCore::Singleton<NBEngine>
{
	friend class EngineCore::Singleton<NBEngine>;
public:
	~NBEngine();
	
	_hr SetUp();
	void Run();
	_hr TurnOff();

	//TODO:Some Inteface to Get App State

protected:
	NBEngine();

	_hr LoadConfig();
	//some config class
	EngineCore::EngineProperty m_EngineProp;

	ModuleFactory m_factory;
	 
	std::shared_ptr<PlatformLayer> m_pPlatformLayer;
	std::unique_ptr<EngineRender::NBRenderEngine> m_pRenderEngine;
};

